A storage system typically comprises one or more storage devices into which information may be entered, and from which information may be obtained, as desired. The storage system includes a storage operating system that functionally organizes the system by, inter alia, invoking storage operations in support of a storage service implemented by the system. The storage system may be implemented in accordance with a variety of storage architectures including, but not limited to, a network-attached storage (NAS) environment, a storage area network (SAN) and a disk assembly directly attached to a client or host computer. The storage devices are typically disk drives organized as a disk array, wherein the term “disk” commonly describes a self-contained rotating magnetic media storage device. The term disk in this context is synonymous with hard disk drive (HDD) or direct access storage device (DASD).
The storage operating system of the storage system may implement a high-level module, such as a file system, to logically organize the information stored on volumes as a hierarchical structure of data containers, such as files and logical units. For example, each “on-disk” file may be implemented as set of data structures, i.e., disk blocks, configured to store information, such as the actual data for the data container. These data blocks are organized within a volume block number (vbn) space that is maintained by the file system. The file system may also assign each data block in the data container a corresponding “file offset” or file block number (fbn). The file system typically assigns sequences of fbns on a per-file basis, whereas vbns are assigned over a larger volume address space. The file system organizes the data blocks within the vbn space as a “logical volume”; each logical volume may be, although is not necessarily, associated with its own file system.
A known type of file system is a write-anywhere file system that does not overwrite data on disks. If a data block is retrieved (read) from disk into a memory of the storage system and “dirtied” (i.e., updated or modified) with new data, the data block is thereafter stored (written) to a new location on disk to optimize write performance. A write-anywhere file system may initially assume an optimal layout such that the data is substantially contiguously arranged on disks. The optimal disk layout results in efficient access operations, particularly for sequential read operations, directed to the disks. An example of a write-anywhere file system that is configured to operate on a storage system is the Write Anywhere File Layout (WAFL®) file system available from Network Appliance, Inc., Sunnyvale, Calif.
The storage system may be further configured to operate according to a client/server model of information delivery to thereby allow many clients to access data containers stored on the system. In this model, the client may comprise an application, such as a database application, executing on a computer that “connects” to the storage system over a computer network, such as a point-to-point link, shared local area network (LAN), wide area network (WAN), or virtual private network (VPN) implemented over a public network such as the Internet. Each client may request the services of the storage system by issuing file-based and block-based protocol messages (in the form of packets) to the system over the network.
A plurality of storage systems may be interconnected to provide a storage system environment or cluster configured to service many clients. Each storage system or node may be configured to service one or more volumes, wherein each volume stores one or more data containers. In one embodiment the volumes serviced by the particular node may be distributed among all of the nodes of the environment. This embodiment distributes the data access requests, along with the processing resources needed to service such requests, among all of the nodes, thereby reducing the individual processing load on each node. In another embodiment, a data container may be striped across a plurality of volumes configured as a striped volume set (SVS), where each volume is serviced by a different node of the cluster, thereby distributing the load for the single data container among a plurality of node. A technique for data container striping is described U.S. patent application Ser. No. 11/119,278, entitled STORAGE SYSTEM ARCHITECTURE FOR STRIPING DATA CONTAINER CONTENT ACROSS VOLUMES OF A CLUSTER, by Michael Kazar, et al, the contents of which are hereby incorporated by reference.
In the latter embodiment described above, each data container is striped across the plurality of volumes using an identical striping (i.e., data placement) pattern. That is, the same data placement pattern is used for each of a plurality of data containers striped across the SVS. Thus, as data is written to data containers, the volumes comprising the SVS are traversed in the same order for each data container. A noted disadvantage of such identical volume traversal arises when a plurality of data containers have continued write operations directed to them. In such situations, one or more nodes servicing the volumes may become unnecessarily overloaded processing the contained write operations, thereby rendering one or more volumes of the SVS a “bottleneck.” Eventually, the increasingly bottlenecked volume of the SVS may become a hotspot. As used herein, a hotspot is a localized area to which a significant number of data access requests are directed. System resources may become overloaded while attempting to process the data access requests, resulting in a concomitant loss of throughput. Consequently, because identical striping patterns are used, as the current “bottlenecked” volume completes its I/O (input/output) operations, each subsequent data container will receive the next set of I/O operations directed to the next volume designated by the striping algorithm, thus becoming the new “bottlenecked” volume. In this way, a wave of bottlenecks cascades among the volumes in accordance with the striping algorithm.